package com.xsd.singleton;

/**
 * @Description: 单例模式 静态内部类
 * @Author: zhoufuzong
 * @Created: 2021-01-23 12:55:57
 * @Version: 1.1.0
 */

/**
 * 优缺点说明：
 * 1) 这种方式采用了类装载的机制来保证初始化实例时只有一个线程。
 * 2) 静态内部类方式在Singleton类被装载时并不会立即实例化，而是在需要实例化
 * 时，调用getInstance方法，才会装载SingletonInstance类，从而完成Singleton的
 * 实例化。
 * 3) 类的静态属性只会在第一次加载类的时候初始化，所以在这里，JVM帮助我们
 * 保证了线程的安全性，在类进行初始化时，别的线程是无法进入的。
 * 4) 优点：避免了线程不安全，利用静态内部类特点实现延迟加载，效率高
 * 5) 结论：推荐使用.
 */

public class SingletonTest7 {
    public static void main(String[] args) {
        Singleton7 singleton7 = Singleton7.getInstance();
        Singleton7 singleton71 = Singleton7.getInstance();
        System.out.println(singleton7 == singleton71);
    }
}

class Singleton7{
    private static Singleton7 instance;

    private  Singleton7(){

    }

    // 在调用的时候会装载内部类，并且线程安全 因为JVM在装载类的时候是线程安全的
    // 外部类的装载不会导致静态内部类的装载,
    private static class SingletonInstacne{
        private  static final Singleton7 SINGLETON_7 = new Singleton7();
    }
    public static  Singleton7 getInstance() {

        return SingletonInstacne.SINGLETON_7;
    }
}